{
  //声明一个函数
  function add(a: number, b: number): number {
    return a + b;
  }

  let sub = (a: number, b: number): number => {
    return a - b;
  };

  let times: (a: number, b: number) => number;
  times = (a, b) => {
    return a * b;
  };

  times(11, 222);

  //声明并赋值
  let divide: (a: number, b: number) => number = (a, b) => {
    return a / b;
  };

  //小知识点
  let fn: (a: number, b: number) => number;
  //函数赋值时, 函数参数的个数可以少于类型声明的个数.  
  fn = (a) => {
    return 100;
  }

}

{
  // TS 可以根据代码体推断函数返回值的类型, 因此函数返回值类型可以被省略
  //截取字符串的函数
  function slice(str: string, start: number, end ?: number){
  }

  slice('abcafewa', 1, 3);
  slice('abcafewa', 1);

  //参数的默认值  连接 mongodb 数据库
  function connect(host: string, port: number=27017){

  }
  connect('http://localhost', 27019);
  connect('http://localhost');

  //剩余参数使用的类型声明
  function add(...args: number[]){
  }

}
